package com.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.config.AppReturn;



public class StrKit {
	
	/**
	 * obj转String
	 * @param obj
	 * @return
	 */
	public static String obj2Str(Object obj)
	{
		if(obj!=null){
			return obj.toString();
		}else{
			return null;
		}
	}
	
	/**
	 * 数组变成字符串格式："['1111','2222']"
	 * @param arr
	 * @return
	 */
	public static String arr2str(String[] arr)
	{
		String res="";
		if(arr!=null&&arr.length>0)
		{
			StringBuffer sb=new StringBuffer("[");
			for(int i=0;i<arr.length;i++)
			{
				if(i!=0)sb.append(",");
				sb.append("'"+arr[i]+"'");
			}
			sb.append("]");
			res=sb.toString();
		}
		return res;
	}
	
	/**
	 * 字符串转数字
	 * @param srt
	 * @return
	 */
	public static int str2int(String str){
		int res=0;
		if(notBlank(str)){
			res=Integer.parseInt(str);
		}
		return res;
	}
	/**
	 * 字符串转数字
	 * @param srt
	 * @return
	 */
	public static int str2int(Object obj){
		int res=0;
		String str=(String)obj;
		if(notBlank(str)){
			res=Integer.parseInt(str);
		}
		return res;
	}
	
	public static AppReturn int2ret(int res)
	{
		AppReturn ret=new AppReturn();
		if(res>0)
		{
			ret.setCode("00");
			ret.setMsg("成功");
		}else{
			ret.setCode("01");
			ret.setMsg("操作失败！");
		}
		return ret;
	}
	
	public static AppReturn int2ret(int res,String msg)
	{
		AppReturn ret=new AppReturn();
		if(res>0)
		{
			ret.setCode("00");
			ret.setMsg(StrKit.notBlank(msg)?msg:"成功");
		}else{
			ret.setCode("01");
			ret.setMsg(msg);
		}
		return ret;
	}
	/**
	 * json转JSONArr
	 * @param json
	 * @return
	 */
	public static JSONArray json2jsa(JSONObject json)
	{
		JSONArray jsa=null;
		try {
			if(json!=null&&json.getString("code").equals("00"))
			{
				jsa=json.getJSONArray("info");
			}
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return jsa;
	}
	
	/**
	 * json转List
	 * @param json
	 * @return
	 */
	public static List<Map<String, Object>> json2list(JSONObject json)
	{
		List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();
		if(json!=null&&json.getString("code").equals("00"))
		{
			JSONArray jsa=json.getJSONArray("info");
			for(int i=0;i<jsa.length();i++)
			{
				JSONObject json_cache=jsa.getJSONObject(i);
				list.add(json_cache.toMap());
			}
		}
		
		return list;
	}
	/**
	 * json转List
	 * @param json
	 * @return
	 */
	public static List<Map<String, Object>> appReturn2list(AppReturn json)
	{
		List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();
		if(json!=null&&json.getString("code").equals("00"))
		{
			JSONArray jsa=json.getJSONArray("data");
			for(int i=0;i<jsa.length();i++)
			{
				JSONObject json_cache=jsa.getJSONObject(i);
				list.add(json_cache.toMap());
			}
		}
		
		return list;
	}
	/**
	 * map转Appreturn
	 * @param map
	 * @return
	 */
	public static AppReturn map2AppReturn(Map<String, Object> map)
	{
		AppReturn ret=new AppReturn();
		JSONObject json=new JSONObject();
		if(map!=null)
		{
			for(String keys :map.keySet())
			{
				json.put(keys, map.get(keys));
			}
			ret.setCode("00");
			ret.setData(json);
		}else{
			ret.setCode("01");
			ret.setMsg("暂无数据！");
			ret.setData(new JSONObject());
		}
		return ret;
	}
	/**
	 * map转Appreturn
	 * @param map
	 * @return
	 */
	public static AppReturn map2AppReturn(Map<String, Object> map,String errMsg)
	{
		AppReturn ret=new AppReturn();
		JSONObject json=new JSONObject();
		if(map!=null)
		{
			for(String keys :map.keySet())
			{
				json.put(keys, map.get(keys));
			}
			ret.setCode("00");
			ret.setData(json);
		}else{
			ret.setCode("01");
			ret.setMsg(errMsg);
		}
		return ret;
	}
	/**
	 * map转JSON
	 * @param map
	 * @return
	 */
	public static JSONObject map2json(Map<String, Object> map)
	{
		JSONObject jso_res=new JSONObject();
		if(map!=null)
		{
			for(String keys :map.keySet())
			{
//				System.out.println(keys+":"+map.get(keys));
				if(keys.equals("ctime"))//判断,表里存储创建时间都是ctime，如果包含ctime就把后面的.去掉
				{
					jso_res.put(keys, map.get(keys).toString().replace(".0", ""));
				}else{
					jso_res.put(keys, map.get(keys)==null?"":map.get(keys));
				}
			}
			jso_res.put("code", "00");
		}
		return jso_res;
	}
	/**
	 * map转JSON
	 * @param map
	 * @return
	 */
	public static JSONObject map2json_str(Map<String, String> map)
	{
		JSONObject jso_res=new JSONObject();
		if(map!=null)
		{
			for(String keys :map.keySet())
			{
				jso_res.put(keys, map.get(keys)==null?"":map.get(keys));
			}
			jso_res.put("code", "00");
		}else{
			jso_res.put("code", "01");
			jso_res.put("msg", "查询无结果！");
		}
		return jso_res;
	}
	
	/**
	 * map转JSON,如果包含imgs字段，imgs字段转为数组
	 * @param map
	 * @return
	 */
	public static JSONObject map2json_imgs(Map<String, Object> map)
	{
		JSONObject jso_res=new JSONObject();
		if(map!=null)
		{
			for(String keys :map.keySet())
			{
				if(keys.equals("imgs"))//如果包含IMGS,将Imgs数组变成JSON数组
				{
					String imgs=(String)map.get("imgs");
					JSONArray jsa=new JSONArray();
					if(StrKit.notBlank(imgs))
					{
						imgs=imgs.replaceAll("\\[", "").replaceAll("\\]", "").replaceAll("\\'", "");
						String[] imgarr=imgs.split(",");
						for(int i=0;i<imgarr.length;i++)
						{
							jsa.put(imgarr[i]);
						}
						
					}
					jso_res.put("imgs", jsa);
				}else{
					jso_res.put(keys, map.get(keys));
				}
			}
			jso_res.put("code", "00");
		}
		return jso_res;
	}
	
	/**
	 * 将JSON返回转为APPreturn返回
	 * @param json
	 * @return
	 */
	public static AppReturn json2AppReturn(JSONObject json)
	{
		AppReturn ret=new AppReturn();
		if(json!=null)
		{
			if(json.has("code")){
				ret.setCode(json.getString("code"));
			}if(json.has("msg")){
				ret.setMsg(json.getString("msg"));
			}if(json.has("data")){
				ret.setData(json.get("data"));
			}if(json.has("info")){
				ret.setData(json.get("info"));
			}if(json.has("total")){
				ret.put("total", json.get("total"));
			}
		}
		return ret;
	}
	
	/**
	 * LIST转JSONARR
	 * @param list
	 * @return
	 */
	public static JSONArray list2jsonArr(List<Map<String, Object>> list)
	{
		JSONArray jsa=new JSONArray();
		if(list!=null&&list.size()>0)
		{
			for(int i=0;i<list.size();i++)
			{
				jsa.put(map2json(list.get(i)));
			}
		}
		
		return jsa;
	}
	/**
	 * LIST转JSONARR
	 * @param list
	 * @return
	 */
	public static JSONArray listStr2jsonArr(List<String> list)
	{
		JSONArray jsa=new JSONArray();
		if(list!=null&&list.size()>0)
		{
			for(int i=0;i<list.size();i++)
			{
				jsa.put(list.get(i));
			}
		}
		
		return jsa;
	}
	
	
	/**
	 * list转JSON
	 * @param map
	 * @return code:00成功 info：详情
	 */
	public static JSONObject list2json(List<Map<String, Object>> list)
	{
		JSONObject jso_res=new JSONObject();
		JSONArray jsa=new JSONArray();
		int total=0;//总条数
		if(list!=null&&list.size()>0)
		{
			
			for(int i=0;i<list.size();i++)
			{
				jsa.put(map2json(list.get(i)));
			}
			total=list.size();
		}

		jso_res.put("info", jsa);
		jso_res.put("code", "00");
		jso_res.put("total", total);
		
		return jso_res;
	}
	/**
	 * list转APPreturn
	 * @param map
	 * @return code:00成功 info：详情
	 */
	public static AppReturn list2Appreturn(List<Map<String, Object>> list)
	{
		AppReturn app=new AppReturn();
		JSONArray jsa=new JSONArray();
		int total=0;//总条数
		if(list!=null&&list.size()>0)
		{
			
			for(int i=0;i<list.size();i++)
			{
				jsa.put(map2json(list.get(i)));
			}
			total=list.size();
		}
		app.setCode("00");
		app.setData(jsa);
		
		return app;
	}
	/**
	 * list转APPreturn
	 * @param map
	 * @return code:00成功 info：详情
	 */
	public static AppReturn list2Appreturn(List<Map<String, Object>> list,long total)
	{
		AppReturn app=new AppReturn();
		JSONArray jsa=new JSONArray();
		if(list!=null&&list.size()>0)
		{
			
			for(int i=0;i<list.size();i++)
			{
				jsa.put(map2json(list.get(i)));
			}
		}
		app.setCode("00");
		app.put("total", total);
		app.setData(jsa);
		
		return app;
	}
	/**
	 * list转JSON,如果list中包含imgs字段，则处理
	 * @param map
	 * @return code:00成功 info：详情
	 */
	public static JSONObject list2json_imgs(List<Map<String, Object>> list)
	{
		JSONObject jso_res=new JSONObject();
		JSONArray jsa=new JSONArray();
		int total=0;//总条数
		if(list!=null&&list.size()>0)
		{
			for(int i=0;i<list.size();i++)
			{
				jsa.put(map2json_imgs(list.get(i)));
			}
			total=list.size();
		}
		jso_res.put("info", jsa);
		jso_res.put("code", "00");
		jso_res.put("total", total);
		return jso_res;
	}
	/**
	 * list转JSON
	 * @param map
	 * @return code:00成功 info：详情
	 */
	public static JSONObject list2json(List<Map<String, Object>> list,long total)
	{
		JSONObject jso_res=new JSONObject();
		JSONArray jsa=new JSONArray();
		if(list!=null&&list.size()>0)
		{
			for(int i=0;i<list.size();i++)
			{
				jsa.put(map2json(list.get(i)));
			}
		}
		jso_res.put("info", jsa);
		jso_res.put("code", "00");
		jso_res.put("total", total);
		
		return jso_res;
	}
	/**
	 * 根据KEY重新排列list，按照升序排列（小的在前）
	 * @param list
	 * @param key
	 * @return
	 */
	public static List<Map<String, Object>> arrayList_up(List<Map<String, Object>> list,String key)
	{
		List<Map<String, Object>> list_res=new ArrayList<Map<String,Object>>();
		if(list!=null&&list.size()>0)
		{
			list_res.add(list.get(0));
			for(int i=1;i<list.size();i++)
			{
				Map<String, Object> map=list.get(i);
				for(int j=0;j<list_res.size();j++)
				{
					Map<String, Object> map_res=list_res.get(j);
					if(Double.parseDouble((String)map.get(key))<=Double.parseDouble((String)map_res.get(key)))
					{
						list_res.add(j, map);
						break;
					}
					if(j==(list_res.size()-1))
					{
						list_res.add(map);
						break;
					}
				}
			}
		}
		return list_res;
	}
	
	/**
	 * 判断空
	 * @param str
	 * @return
	 */
	public static boolean isBlank(String str) {
		if (str == null) {
			return true;
		}
		int len = str.length();
		if (len == 0) {
			return true;
		}
		for (int i = 0; i < len; i++) {
			switch (str.charAt(i)) {
			case ' ':
			case '\t':
			case '\n':
			case '\r':
			// case '\b':
			// case '\f':
				break;
			default:
				return false;
			}
		}
		return true;
	}
	
	/**
	 * 非空
	 * @param str
	 * @return
	 */
	public static boolean notBlank(String str) {
		return !isBlank(str);
	}

	public static void main(String[] args) {
		List<String> list=new ArrayList<String>();
		list.add(0, "mwg");
		list.add(0, "dxj");
		list.add(0, "gg");
		for(int i=0;i<list.size();i++)
		{
			System.out.println(list.get(i));
		}
	}
}
